package es.deusto.ingenieria.tesoroaventurero;

import java.awt.Point;
import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

import es.deusto.ingenieria.is.formulation.State;
import es.deusto.ingenieria.is.search.SearchMethod;
import es.deusto.ingenieria.is.search.blind.BreadthFS;
import es.deusto.ingenieria.is.search.blind.BreadthFSwithLog;

public class MainProgram {

	private static List<Point> gemas;
	private static List<Point> gemasNuevas;
	private static Utilidades utilidades;
	



	
	
	public static void main (String [] args){
		try{
			ArrayList<State> estadosFinales = new ArrayList<State>();
			TesoroAventureroProblem problem = new TesoroAventureroProblem();
			Utilidades utils = new Utilidades();

			EscenarioXMLReader xml = new EscenarioXMLReader("data/treasureadventure-1.xml");
			Escenario estadoInicial = new Escenario(xml.getCasillas(), xml.getTesoro(), xml.getGemas());
			State initialState = new State(estadoInicial);
			problem.addInitialState(initialState);
			estadosFinales = utils.crearArrayEstadosFinales(xml);
			SearchMethod search = BreadthFS.getInstance();
			problem.solve(search, estadosFinales);
//			gemas = new LinkedList<Point>();
//			TesoroAventureroProblem problem = new TesoroAventureroProblem();
//			Escenario initialState = (Escenario) new EscenarioXMLReader("data/treasureadventure-1.xml").getInformation();
//			problem.addInitialState( new State(initialState));
//			
//			for (int i = 0; i < ((Escenario)initialState).getCasillas().length; i++){
//				for (int j = 0; j < ((Escenario)initialState).getCasillas()[0].length; j++){
//					if (initialState.getCasilla(i, j).isGema()){
//						gemas.add(new Point(i, j));
//						
//					}		
//				}
//			}
//			
//			gemasNuevas = utilidades.ordenarMejorado(gemas);
//				
//			while (gemasNuevas.size() != 0){
//				Personaje p = new Personaje();
//				p.setLocation(gemasNuevas.get(0).getLocation());
//				Escenario e = initialState;
//				e.setPersonaje(p);
//				problem.addFinalState(new State(e));
//				problem.solve(BreadthFSwithLog.getInstance());
//				e.getCasilla(gemasNuevas.get(0).x, gemasNuevas.get(0).y).setGema(true);
//				gemasNuevas.remove(0);
//			}
//			
//			Personaje pT = new Personaje();
//			pT.setLocation(initialState.getTesoro());
//			Escenario e2 = initialState;
//			e2.setPersonaje(pT);
//			problem.addFinalState(new State(e2));
//			problem.solve(BreadthFSwithLog.getInstance());
			
		}catch (Exception ex){
			System.err.println("% [MainProgram] Error: " + ex.getMessage());
			ex.printStackTrace();
		}
	}
}
